/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import model.Area;
import model.TipoGasto;

/**
 *
 * @author Jeisse
 */
public class TipoGastoDao {
    
    private Connection con;
    private PreparedStatement comando;

    public TipoGastoDao() {
    }

    
    public void insere(TipoGasto tipoGasto){
           String sql = "INSERT INTO tp_gasto(nome,valor,id_area) " +
               "VALUES(?,?,?)";
       //Cria a conexao e gera o comando.
       conectar(sql);
       try {
           comando.setString(1, tipoGasto.getNome());
           comando.setDouble(2, tipoGasto.getValor());
           comando.setInt(3, tipoGasto.getArea().getId());

           comando.execute();

       } catch (SQLException ex) {
            Logger.getLogger(TipoGastoDao.class.getName()).log(Level.SEVERE, null, ex);
       } finally {
           //fecha o comando e a conexao
          fechar();
       }
    }

    public List<TipoGasto> getLista() {
        List<TipoGasto> tipoGastos = new ArrayList<TipoGasto>();
        conectar("select * from tp_gasto");
        ResultSet rs;
        try {
            rs = comando.executeQuery();
            while (rs.next()) {
            	TipoGasto tipoGasto = new TipoGasto();
            	tipoGasto.setId(rs.getInt("id"));
            	tipoGasto.setNome(rs.getString("nome"));
            	tipoGasto.setValor(rs.getDouble("valor"));
                Area area = new Area();
                area.setId(rs.getInt("id_area"));
            	tipoGasto.setArea(area);
            	tipoGastos.add(tipoGasto);
            }
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(TipoGastoDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally{
            fechar();
        }
        return tipoGastos;
    }

    public TipoGasto getTipoGastoById(int id)
    {
        String sql = "SELECT * FROM tp_gasto WHERE id = ?";
        TipoGasto tipoGasto = new TipoGasto();
        conectar(sql);
        ResultSet rs;
        try {

            comando.setInt(1, id);
            rs = comando.executeQuery();
            rs.next();

            tipoGasto.setId(rs.getInt("id"));
            tipoGasto.setNome(rs.getString("nome"));
            tipoGasto.setNome(rs.getString("nome"));
            tipoGasto.setValor(rs.getDouble("valor"));
            Area area = new Area();
            area.setId(rs.getInt("id_area"));
            
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(TipoGastoDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally{
            fechar();
        }
        return tipoGasto;
    }

    public TipoGasto getPessoaByNome(String nome)
    {
        String sql = "SELECT * FROM tp_gasto WHERE nome = ?";
        TipoGasto tipoGasto = new TipoGasto();
        conectar(sql);
        ResultSet rs;
        try {

            comando.setString(1, nome);
            rs = comando.executeQuery();
            rs.next();
            
            tipoGasto.setId(rs.getInt("id"));
            tipoGasto.setNome(rs.getString("nome"));
            tipoGasto.setValor(rs.getDouble("valor"));
            Area area = new Area();
            area.setId(rs.getInt("id_area"));
            	
            tipoGasto.setArea(area);
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(TipoGastoDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally{
            fechar();
        }
        return tipoGasto;
    }

    public void atualiza(TipoGasto tipoGasto) {
        String sql = "UPDATE tp_gasto " +
                "SET nome=?, valor=?, id_area=?" +
                "WHERE id=?";
        conectar(sql);
        try {
            comando.setInt(1, tipoGasto.getId());
            comando.setString(2, tipoGasto.getNome());
            comando.setDouble(3, tipoGasto.getValor());
            comando.setInt(4, tipoGasto.getArea().getId());
            comando.execute();
        } catch (SQLException ex) {
            Logger.getLogger(TipoGastoDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally{
            fechar();
        }
    }

    public void remove(TipoGasto tipoGasto)
    {
        String sql = "DELETE FROM tp_gasto WHERE id=?";
        conectar(sql);
        try {
            comando.setInt(1, tipoGasto.getId());
            comando.execute();
        } catch (SQLException ex) {
            Logger.getLogger(TipoGastoDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        finally{
            fechar();
        }

    }

    private void conectar(String sql) {
        try {
            con = ConnectionFactory.getConnection();
            comando = con.prepareStatement(sql);
        } catch (SQLException ex) {
            Logger.getLogger(TipoGastoDao.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    private void fechar() {
        try {
            comando.close();
            con.close();
        } catch (SQLException ex) {
            Logger.getLogger(TipoGastoDao.class.getName()).log(Level.SEVERE, null, ex);
        }
    }    
}
